[小ネタ] MackerelのURL外形監視サービスメトリックをエクスポートしてみた #mackerelio

[小ネタ] MackerelのURL外形監視サービスメトリックをエクスポートしてみた #mackerelio

MackerelのURL外形監視は便利ですよね!
Clock Icon2022.07.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

MackerelのURL外形監視は単に死活だけではなく、レスポンスタイムをグラフにプロットしたり、それに対して閾値を設定して通知させたりすることが可能です。

実際監視させると、こんな感じですね。
サービスメトリック「HTTP Response Time」として可視化されます。

ところでMackerelはAPIを使って、収集されたメトリックを時間指定でエクスポートさせることが可能です。
サービスメトリックについてはここにドキュメントがあります。

通常のサービスメトリックであれば、このAPI( metric-names )を使ってメトリック名を取得したのち、下記のAPIで期間を指定して取得することになるのですが、

URL外形監視の場合は metric-names を使っても名前が取得出来ません。

% curl -sH "X-Api-Key: ${MACKEREL_APIKEY}" \
    https://api.mackerelio.com/api/v0/services/${SERVICE_NAME}/metric-names
{"names":[]}

恐らくですが、URL外形監視のメトリックはユーザーに代わってMackerelのシステムが投稿しているため、リストに出てこないのだと思います。

じゃあエクスポート出来ないのか、と言えばそんなことはなくて、ちゃんとメトリック名を調べる方法があります。
具体的にはここでマウスホバーさせてください。

小さくて見づらい上にコピペできないので、不便ですね!

ご安心下さい。このメトリック名は __externalhttp.responsetime.<モニタID> で一意に求められます。
モニタIDは、URL外形監視の設定画面のURLから確認出来ます。

実際に取得してみたらこんな感じです。 jq でちょっと整形&時刻情報を UNIXTIME から ISO 8601 に変換してみました。

MACKEREL_APIKEY='****'
SERVICE_NAME='Home'
MONITOR_ID='****'
TIME_FROM=$(date -d "10 minutes ago" +%s)
TIME_TO=$(date +%s)

URL_API="https://api.mackerelio.com/api/v0/services/${SERVICE_NAME}/metrics"
NAME="__externalhttp.responsetime.${MONITOR_ID}"

curl -sH "X-Api-Key: ${MACKEREL_APIKEY}" \
    "${URL_API}?name=${NAME}&from=${TIME_FROM}&to=${TIME_TO}" \
    | jq -c '.metrics[]|[.time,(.time|todate),.value]'
[1657187700,"2022-07-07T09:55:00Z",464]
[1657187760,"2022-07-07T09:56:00Z",428]
[1657187820,"2022-07-07T09:57:00Z",437]
[1657187880,"2022-07-07T09:58:00Z",433]
[1657187940,"2022-07-07T09:59:00Z",450]
[1657188000,"2022-07-07T10:00:00Z",408]
[1657188060,"2022-07-07T10:01:00Z",453]
[1657188120,"2022-07-07T10:02:00Z",430]
[1657188180,"2022-07-07T10:03:00Z",417]
[1657188240,"2022-07-07T10:04:00Z",423]

なお、タイムスタンプの部分は UNIXTIME に変換する必要があるので GNU date を使っていますが、macOS から実行される場合は以下の記事を参考に書き直してみて下さい。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.